SPSS INDEX 函数
作者: Ruben Geert van den Berg ,发表于 SPSS 字符串变量
SPSS 的 INDEX
函数返回指定表达式在字符串中首次出现的位置。如果表达式在字符串中未出现,则返回零。通常,我们总是将它写作 CHAR.INDEX
。原因已在 SPSS Unicode 模式 中进行了解释。请注意,字符串值区分大小写。
SPSS Index 函数示例
SPSS Index 示例
假设我们有一些包含电子邮件地址的数据,并且我们想了解哪些域名被使用得最多。对于每个电子邮件地址,域名是 @
符号之后的所有内容。语法 如下所示,它演示了如何实现此目的。我们首先在第 2 步中找到第一个(也是唯一的)@
符号的位置。接下来,我们将该位置代入第 4 步中的 SUBSTR
函数。
SPSS Index 语法示例 1
***1. 创建数据。
**
data list free/email (a20).
begin data
[ [email protected] ](/cdn-cgi/l/email-protection) [ [email protected] ](/cdn-cgi/l/email-protection) [ [email protected] ](/cdn-cgi/l/email-protection) [ [email protected] ](/cdn-cgi/l/email-protection) maarten1979bkb.nl
end data.
***2. 查找第一个 "@" 的位置。
**
compute first_a = char.index(email,'@').
exe.
***3. 声明新的字符串变量用于存储域名。
**
string domain(a15).
***4. 从电子邮件地址中提取域名。
**
compute domain = char.substr(email,char.index(email,'@') + 1).
exe.
***5. 针对没有 "@" 符号的电子邮件地址进行更正。
**
if char.index(email,'@') = 0 domain = ''.
exe.
请注意,数据中存在一个错误,因为最后一个电子邮件地址不包含任何 @
符号。因此,对于这种情况,first_a
变量的值为零。这导致第 4 步产生不正确的 domain
值,因此需要在最后进行更正。一个更好的选择是使用单个 IF 命令,仅当电子邮件地址中存在 @
符号时才计算域名。
SPSS Index - 除数 (Divisor)
SPSS 的 INDEX
函数一个鲜为人知的功能是可选的第三个参数,称为除数(divisor)。除数将搜索表达式分成长度为 n 的子字符串。返回其中一个子字符串首次出现的位置。例如,在 CHAR.INDEX(variable,'0123456789',1)
中,除数是 1
。这会将 0123456789
分解为长度为 1 的子字符串,从而得到数字 0
到 9
。现在返回第一个数字的位置。
下一个语法示例从字符串中提取所有数字。它结合使用除数(divisor)和 LOOP 循环、SUBSTR 函数和 CONCAT 函数来实现此目的。最后一步使用 ALTER TYPE 命令将其转换为数值型变量。
SPSS Index 语法示例 2
***1. 检查电子邮件中是否存在任何数字。
**
compute number_present = char.index(email,'0123456789',1) > 0.
exe.
***2. 声明新的字符串变量。
**
string numbers(a20).
***3. 循环遍历字符,并将每个数字传递到字符串变量中。
**
loop #pos =1 to char.length(email).
if char.index(char.substr(email,#pos,1),'0123456789',1) > 0 numbers = concat(numbers,char.substr(email,#pos,1)).
end loop.
exe.
***4. 将字符串变量转换为数值型变量。
**
alter type numbers(f1.0).